#include "Sem.hpp"

int main()
{
    SemBuilder SB;
    auto fsem = SB.SET_VAL(1).Build(GET_SEM);

    pid_t n = fork();
    srand(time(0) ^ getpid());
    if (n == 0) // 子进程
    {
        auto zsem = SB.Build(USE_SEM);
        int cnt = 10;
        while (cnt--)
        {
            zsem->P();
            printf("B");
            usleep(rand() % 9566);
            fflush(stdout);
            printf("B");
            usleep(rand() % 5200);
            fflush(stdout);
            zsem->V();
        }
    }

    // 父进程
    int cnt = 10;
    while (cnt--)
    {
        fsem->P();
        printf("S");
        usleep(rand() % 4576);
        fflush(stdout);
        printf("S");
        usleep(rand() % 5555);
        fflush(stdout);
        fsem->V();
    }
    cout << endl;

    return 0;
}